package educar.inscripcion;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import educar.login.Session;
import educar.principal.IController;
import educar.principal.IView;
import educar.db.DbConnection;
import educar.db.JPA;

public class InscripcionMateriaController {


		private static JPA jpa = new JPA();

		public static boolean existe (String dni) {
			try {
				InscripcionMateria ins = getInscripcionMateria (dni);
				return true;
			} catch (InscripcionNoEncontrada ex) {
				return false;
			}
		}

		/**
		 * Este metodo nos permite agregar  un nuevo registro en la tabla cursar.
		 * @param ins
		 * @return
		 */
		public static boolean save(InscripcionMateria ins) {
			try {
				getInscripcionMateria(ins.getCodM());
				return false;
			} catch (InscripcionNoEncontrada e1) {
				String[] columns = { "materia_cod","alumno_dni"};

				PreparedStatement stm = jpa.newRecord(DbConnection.bd+".cursar", columns);

				try {
					
					stm.setString(1, ins.getDni());
					stm.setString(2, ins.getCodM());

				} catch (SQLException e) {
					e.printStackTrace();
					return false;
				}

				jpa.create(stm);
				return true;
			}
		}
		
		/**
		 * Este metodo es usado para eliminar un registro de la tabla cursar.
		 * @param cargo
		 */
		public static void destroy(String cargo) {
			jpa.destroy("cargo", "codigo",cargo);
		}

		public static InscripcionMateria getInscripcionMateria (String dni) throws InscripcionNoEncontrada {
			ResultSet rs = null;
			InscripcionMateria i = null;

			rs = jpa.getByField("cursar","materia_cod",dni);
			
			try {
				if (rs.next()) {
					i = new InscripcionMateria (rs.getString(1), rs.getString(2));
				} else {
					throw new InscripcionNoEncontrada();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}

			return i;
		}
		
		/**
		 * Actualiza los datos de un registro en la tabla.
		 * @param column "Nombre de la columna"
		 * @param value "Valor que reemplaza al existente"
		 * @param id "Campo por el cual se identifica"		
		 */
		public static void update (String column,String value, String id) {
			jpa.update("cursar", column, value,"materia_cod",id);
		}
		
		/**
		 * Este metodo genera una consulta con las materias que pertenecen a una 
		 * carrera.
		 * @param codigo "Parametro usado para filtrar en la consulta."
		 * @return
		 */
		public static ResultSet listar (String codigo){
			String sentence = "select codigo,nombre from educar_db.materia ";
			sentence += "inner join educar_db.contiene on materia_cod=codigo ";
			sentence += "where carrera_cod= "+ codigo +" GROUP BY codigo,nombre;";
			return jpa.runQuery(sentence);
		}

	}

